<?php

if (!defined('BASEPATH'))
    exit('Sem permissao de acesso direto ao Script.');


class Servico extends TR_Controller{
    function __construct() {
        
        parent::__construct();
        
        // Verifica o acesso do usuario a esta funcionalidade
        if(!$this->autenticacao->verifica_acesso()){
            
            redirect($this->config->item('area_admin') . '/acesso_negado');
        }
        
        // Carrega as configuracoes do usuario
        $this->load->config('servico');
        
        // Helper que faz tratamento de data
        $this->load->helper('data');
        
        // Carrega models utilizadas
        $this->load->model(array(
            $this->config->item('area_admin') . '/servico_model',
            $this->config->item('area_admin') . '/setor_model',
            $this->config->item('area_admin'). '/funcionario_model'
        ));
    }
    
    
    function index(){
        
        // Delega a acao a ser executada para o metodo all
        $this->all();
    }
    
    /**
     * Lista os registros cadastrados
     * 
     * @return void
     */
    function all(){
        
        $dados['servico'] = $this->servico_model->get_all();
        
        for($i=0;$i<sizeof($dados['servico']);$i++){
            
           $dados['servico'][$i]->funcionarios_ocupados =  $this->servico_model->get_funcionario_ocupado($dados['servico'][$i]->id);
        }
        
        
        $dados['titulo'] = 'Gerenciar serviços';
        $dados['view']   = $this->config->item('area_admin') . '/servico/index';
        
        $this->load->view($this->config->item('area_admin') . '/layout',$dados);
    }
    
    /**
     * Exibe o formulario de cadastramento de um novo usuario
     * 
     * @return void
     */
    function cadastrar(){
        
        $dados['titulo'] = 'Cadastrar serviço';
        $dados['setores']= $this->setor_model->get_setores();
        $dados['view']   = $this->config->item('area_admin') . '/servico/editar';
        $dados['js'][]   = 'plugins/jquery.validate';
        $dados['js'][]   = 'pages/editar_servico';
        $dados['js'][]   = 'plugins/jquery.inputmask.bundle.min';
        
        $this->load->view($this->config->item('area_admin') . '/layout',$dados);
    }
    
    /**
     * Recebe o ID do registro a ser editado e exibe o formulario de edicao
     * 
     * @param int $id ID do registro a ser editado
     * @return void
     */
    function editar($id){
        
        $dados['servico'] = $this->servico_model->get_by_id($id);        
        $dados['setores']= $this->setor_model->get_setores();
        $dados['funcionarios'] =  $this->funcionario_model->get_funcionario_setor($dados['servico']->setor_id);
        $dados['titulo'] = 'Editar serviço';
        $dados['view']   = $this->config->item('area_admin') . '/servico/editar';
        $dados['js'][]   = 'plugins/jquery.validate';
        $dados['js'][]   = 'pages/editar_servico';
        $dados['js'][]   = 'plugins/jquery.inputmask.bundle.min';
        
        $this->load->view($this->config->item('area_admin') . '/layout',$dados);
    }
    
    /**
     * Recebe os dados de um registro, valida seus dados e caso sejam validos os insere
     * no banco de dados, caso contrario exibe o formulario de edicao novamente
     * 
     * @return void
     */
    function salvar(){
        
        // Carrega a library de validacao
        $this->load->library('form_validation');
        
        // Busca as regras de validacao nos arquivos de configuracao
        $regras = $this->config->item('regras_validacao');
        
        // Seta as regras na library de validacao
        $this->form_validation->set_rules($regras);
        
        // Seta o html das mensagens de validacao
        $this->form_validation->set_error_delimiters('<label class="error">', '</label>');
        
        // Executa a validacao
        if ($this->form_validation->run() === FALSE) {
            
            // Caso os dados sejam invalidos exibe o formulario de validacao novamente
            
            $dados['titulo'] = 'Editar servico';
            $dados['view']   = $this->config->item('area_admin') . '/servico/editar';
            $dados['js'][]   = 'plugins/jquery.validate';
            $dados['js'][]   = 'pages/editar_servico';
            
            $this->load->view($this->config->item('area_admin') . '/layout',$dados);
        } else {
            
            // Caso os dados sejam validos salva no banco de dados
            
            $servico = new stdClass();

            $id = $this->input->post('id');
            //$servico->nome = $this->input->post('nome');
            $servico->descricao = $this->input->post('descricao');
            $servico->titulo = $this->input->post('titulo');
            $servico->progresso = $this->input->post('progresso');
            $servico->setor_id = $this->input->post('setor');
            $servico->data_inicio = $this->input->post('data_inicio');
            $servico->data_fim = $this->input->post('data_fim');
            $servico->funcionarios=$this->input->post('funcionarios');
            $servico->data_venc = $this->input->post('data_vencimento');
            $servico->usuario_id = (int)$this->session->userdata('usuario_id');
  
            // Formata as datas para o formato que deven ser salvo no banco de dados
            $servico->data_venc = set_data_banco( $servico->data_venc);

            if (empty($id)) {
                $resultado = $this->servico_model->inserir($servico);
            } else {

                $servico->id = $id;
                
                if(!empty($servico->data_inicio)){
                    $servico->data_inicio = set_data_banco($servico->data_inicio);
                }
                if(!empty($servico->data_fim)){
                    $servico->data_fim = set_data_banco( $servico->data_fim);
                }
                
                
                
                $resultado = $this->servico_model->atualizar($servico);
            }

            // Captura o resultado da operacao e seta a mensagem a ser exibida para o usuario
            if ($resultado) {

                if (empty($id)) {

                    $mensagem = array('msg' => 'insert-ok', 'tipo' => 'success');
                } else {

                    $mensagem = array('msg' => 'update-ok', 'tipo' => 'info');
                }
            } else {
                $mensagem = array('msg' => 'erro', 'tipo' => 'danger');
            }

            // Grava a mensagem numa flashdata
            $this->session->set_flashdata('msg', $mensagem);

            // Redireciona o usuario para a tela de gerenciamento
            redirect($this->config->item('area_admin') . '/servico', 'refresh');
        }
    }
    
    /**
     * Recebe o ID do registro e executa a remocao
     * 
     * @param int $id ID do registro
     * @return void
     */
    function remover($id){
        
        // informa o banco de dados qual registro deve ser removido
        $resultado = $this->servico_model->remover($id);
        
        // Captura o resultado da operacao
        if($resultado){
            
            $mensagem = array('msg' =>'delete-ok', 'tipo'=> 'success');
        }
        else{
            $mensagem = array('msg' =>'erro', 'tipo'=> 'danger');
        }
        // Seta a mensagem numa flashdata
        $this->session->set_flashdata('msg',$mensagem);
        
        //Redireciona para a tela de gerenciamento
        redirect($this->config->item('area_admin') . '/servico', 'refresh');
    }
    
    function load_funcionarios($s = 0){
        
        
        
        if($s== 0){
            $setor = $this->input->post('setor');
        }
            else{
                $setor = $s;
            }
        
        $funcionarios = $this->funcionario_model->get_funcionario_setor($setor);
        
        foreach ($funcionarios as $f){
            
            
                                    
            $atributos = array(
                        'name'    => 'funcionarios[]',
                        'id'      => 'f_' . $f->id,
                        'value'   => $f->id,
                          );

            echo '<div class="checkbox"><label>' . form_checkbox($atributos) . '&nbsp;' . $f->nome . '</label></div>';
            
        }
        
    }
    
    function aprovar($id)
    {
        $dados = new stdClass();
        $data=date('Y-m-d');
        $dados->id=$id;
        $resultado=$this->servico_model->get_by_id($id);
        $progresso=$resultado->progresso;
        if($progresso=='1')
        {
           $dados->progresso='2';
           $dados->data_inicio=$data;
        }
        else if($progresso=='2')
        {
            $dados->progresso='3';
            $dados->data_fim=$data;
        }
        //$dados->funcionarios=$resultado->funcionarios;
        $resultado = $this->servico_model->aprovar($dados);
        
        if($resultado){
            
            $mensagem = array('msg' =>'sucesso', 'tipo'=> 'success');
        }
        else{
            $mensagem = array('msg' =>'erro', 'tipo'=> 'danger');
        }
        // Seta a mensagem numa flashdata
        $this->session->set_flashdata('msg',$mensagem);
        
        redirect($this->config->item('area_admin') . '/servico', 'refresh');
    }
}
